// pages/admin/timetable/import/import.js
Page({
  data: {
    classList: [{ id: 0, name: '请选择班级' }],
    classIndex: 0,
    sourceClassList: [{ id: 0, name: '请选择班级' }],
    sourceClassIndex: 0,
    importType: 'template', // 默认使用模板导入
    startWeek: '1',
    endWeek: '20',
    isLoading: false
  },

  onLoad: function() {
    // 获取班级列表
    this.fetchClassList();
    
    // 从上一页获取班级ID
    const pages = getCurrentPages();
    if (pages.length > 1) {
      const prevPage = pages[pages.length - 2];
      if (prevPage.data.classIndex > 0) {
        // 自动选择上一页选中的班级
        this.setData({
          classIndex: prevPage.data.classIndex
        });
      }
    }
  },

  // 获取班级列表
  fetchClassList: function() {
    wx.showLoading({
      title: '加载中...',
    });
    
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    
    wx.request({
      url: `${serverUrl}/api/admin/classes`,
      method: 'GET',
      header: {
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
      },
      success: (res) => {
        wx.hideLoading();
        
        if (res.statusCode === 200) {
          const classes = [{ id: 0, name: '请选择班级' }, ...res.data];
          this.setData({
            classList: classes,
            sourceClassList: classes
          });
        } else {
          wx.showToast({
            title: res.data.message || '获取班级列表失败',
            icon: 'none'
          });
        }
      },
      fail: () => {
        wx.hideLoading();
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 班级选择变化
  classChange: function(e) {
    this.setData({
      classIndex: e.detail.value
    });
  },

  // 源班级选择变化
  sourceClassChange: function(e) {
    this.setData({
      sourceClassIndex: e.detail.value
    });
  },

  // 导入方式变化
  importTypeChange: function(e) {
    this.setData({
      importType: e.detail.value
    });
  },

  // 起始周输入
  startWeekInput: function(e) {
    this.setData({
      startWeek: e.detail.value
    });
  },

  // 结束周输入
  endWeekInput: function(e) {
    this.setData({
      endWeek: e.detail.value
    });
  },

  // 下载模板
  downloadTemplate: function() {
    // 验证是否选择了班级
    if (this.data.classIndex === 0) {
      wx.showToast({
        title: '请先选择班级',
        icon: 'none'
      });
      return;
    }

    wx.showLoading({
      title: '准备下载...',
    });
    
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    const classId = this.data.classList[this.data.classIndex].id;
    
    // 使用正确的API路径
    wx.request({
      url: `${serverUrl}/api/admin/timetable/template/${classId}`,
      method: 'GET',
      header: {
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
      },
      responseType: 'arraybuffer',  // 设置响应类型为二进制数据
      success: (res) => {
        wx.hideLoading();
        
        if (res.statusCode === 200) {
          // 将二进制数据保存为临时文件
          const fs = wx.getFileSystemManager();
          const tempFilePath = `${wx.env.USER_DATA_PATH}/timetable_template.xlsx`;
          
          try {
            fs.writeFileSync(tempFilePath, res.data, 'binary');
            
            // 打开文件
            wx.openDocument({
              filePath: tempFilePath,
              showMenu: true,
              success: () => {
                wx.showToast({
                  title: '模板已打开',
                  icon: 'success'
                });
              },
              fail: (err) => {
                console.error('打开文件失败:', err);
                wx.showModal({
                  title: '模板已下载',
                  content: '文件已保存，但无法直接打开。请使用其他应用打开Excel文件。',
                  showCancel: false
                });
              }
            });
          } catch (err) {
            console.error('保存文件失败:', err);
            wx.showToast({
              title: '保存模板失败',
              icon: 'none'
            });
          }
        } else {
          wx.showModal({
            title: '下载失败',
            content: '无法下载模板，请稍后重试',
            showCancel: false
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('模板下载请求失败:', err);
        
        wx.showModal({
          title: '模板下载提示',
          content: '下载失败，请检查网络连接后重试',
          showCancel: false
        });
      }
    });
  },

  // 导入课表
  importTimetable: function() {
    // 表单验证
    if (this.data.classIndex === 0) {
      wx.showToast({
        title: '请选择班级',
        icon: 'none'
      });
      return;
    }
    
    if (this.data.importType === 'copy') {
      if (this.data.sourceClassIndex === 0) {
        wx.showToast({
          title: '请选择源班级',
          icon: 'none'
        });
        return;
      }
      
      if (this.data.classList[this.data.classIndex].id === this.data.sourceClassList[this.data.sourceClassIndex].id) {
        wx.showToast({
          title: '源班级不能与目标班级相同',
          icon: 'none'
        });
        return;
      }
      
      if (!this.data.startWeek || !this.data.endWeek) {
        wx.showToast({
          title: '请输入周次范围',
          icon: 'none'
        });
        return;
      }
      
      const startWeek = parseInt(this.data.startWeek);
      const endWeek = parseInt(this.data.endWeek);
      
      if (startWeek > endWeek) {
        wx.showToast({
          title: '起始周不能大于结束周',
          icon: 'none'
        });
        return;
      }
      
      if (startWeek < 1 || endWeek > 20) {
        wx.showToast({
          title: '周次范围应在1-20之间',
          icon: 'none'
        });
        return;
      }
      
      // 复制课表
      this.copyTimetable();
    } else {
      // 模板导入 - 选择文件上传
      wx.chooseMessageFile({
        count: 1,
        type: 'file',
        extension: ['xlsx', 'xls'],
        success: (res) => {
          const tempFilePath = res.tempFiles[0].path;
          this.uploadTimetableFile(tempFilePath);
        }
      });
    }
  },

  // 上传课表文件
  uploadTimetableFile: function(filePath) {
    wx.showLoading({
      title: '上传中...',
    });
    
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    const classId = this.data.classList[this.data.classIndex].id;
    
    wx.uploadFile({
      url: `${serverUrl}/api/admin/timetable/import`,
      filePath: filePath,
      name: 'file',
      formData: {
        classId: classId
      },
      header: {
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
      },
      success: (uploadRes) => {
        try {
          const result = JSON.parse(uploadRes.data);
          
          if (uploadRes.statusCode === 200) {
            wx.showToast({
              title: '导入成功',
              icon: 'success'
            });
            
            // 返回上一页
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          } else {
            wx.showToast({
              title: result.message || '导入失败',
              icon: 'none'
            });
          }
        } catch (e) {
          wx.showToast({
            title: '解析响应失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('上传文件失败:', err);
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        wx.hideLoading();
      }
    });
  },

  // 复制课表
  copyTimetable: function() {
    wx.showLoading({
      title: '复制中...',
    });
    
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    
    const data = {
      sourceClassId: this.data.sourceClassList[this.data.sourceClassIndex].id,
      targetClassId: this.data.classList[this.data.classIndex].id,
      startWeek: parseInt(this.data.startWeek),
      endWeek: parseInt(this.data.endWeek)
    };
    
    // 添加调试日志
    console.log('发送复制课表请求:', data);
    
    wx.request({
      url: `${serverUrl}/api/admin/timetable/copy`,
      method: 'POST',
      data: data,
      header: {
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
      },
      success: (res) => {
        wx.hideLoading();
        console.log('复制课表响应:', res);
        
        if (res.statusCode === 200) {
          wx.showToast({
            title: '复制成功',
            icon: 'success'
          });
          
          // 延迟返回上一页
          setTimeout(() => {
            this.goBack();
          }, 1500);
        } else if (res.data && res.data.message === '源班级没有课表数据') {
          // 特殊处理源班级没有数据的情况
          wx.showModal({
            title: '复制失败',
            content: '源班级没有课表数据，请先为源班级添加课表',
            showCancel: false
          });
        } else {
          wx.showModal({
            title: '复制失败',
            content: res.data && res.data.message ? res.data.message : '请检查参数是否正确',
            showCancel: false
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('复制课表请求失败:', err);
        wx.showModal({
          title: '网络错误',
          content: '请检查网络连接后重试',
          showCancel: false
        });
      }
    });
  },

  // 返回上一页
  goBack: function() {
    wx.navigateBack();
  }
});